#include "RR.h"
#include <stdio.h>
#include <stdlib.h>

/**
 * 函数: calculateTimes
 * 功能: 根据时间片轮转调度算法计算每个进程的完成时间、周转时间和等待时间
 *
 * 参数:
 *  - processes: 指向包含多个进程信息的数组
 *  - n: 进程数量
 *  - time_slice: 时间片长度
 *
 * 描述:
 *  计算进程的完成时间，周转时间和等待时间并存在结构体中即可
 */
void
calculateTimes (Process *processes, int n, int time_slice)
{
  // TODO
  int cur_time = 0; // 记录当前时间
  int all_time = 0; // 记录完成所有进程所需用时
  int left_times[10] = {0}; // 记录各进程剩余时间
  for (int i = 0; i < n; ++i)
  {
    all_time += processes[i].burst_time;
    left_times[i] = processes[i].remaining_time;
  }
  while (all_time - cur_time != 0)
  {
    for (int i = 0; i < n; ++i)
    {
      // 如果当前进程剩余时间片为0，直接跳过
      if (left_times[i] == 0)
        continue;
      if (left_times[i] <= time_slice)
      {
        // 丢弃剩余时间片
        cur_time += left_times[i];
        left_times[i] = 0;
        processes[i].completion_time = cur_time;
      }
      else
      {
        left_times[i] -= time_slice;
        cur_time += time_slice;
      }
    }
  }
  // 计算周转时间和等待时间
  for (int i = 0; i < n; ++i)
  {
    processes[i].turnaround_time = processes[i].completion_time - processes[i].arrival_time;
    processes[i].waiting_time = processes[i].turnaround_time - processes[i].burst_time;
  }
}
